See README.md.
Sequence of scripts:
devtoolsloadPkg functionmakeMetadata function## Sourcing https://gist.githubusercontent.com/benjamin-chan/3b59313e8347fffea425/raw/c03cd15480a6444399ff5f34892f5911d6e12b44/loadPkg.R
## SHA-1 hash of file is 0bb1bb041c1dda15ee613db701d0c5784d1196a5
## Sourcing https://gist.githubusercontent.com/benjamin-chan/091209ab4eee1f171540/raw/156a5e29111d0da6ec5693f5a881628e10fb9613/makeMetadata.R
## SHA-1 hash of file is 8b07ca14d3606ec83f76e636e7f9088e73a003b0
Replicate data from Ono, Miyuki, et al. “A Meta-Analysis of Cognitive Impairment and Decline Associated with Adjuvant Chemotherapy in Women with Breast Cancer.” Front Oncol. 2015; 5: 59.
Data file was requested and received from the co-author, James Ogilvie, in October 2015.
Read data file (Google Sheet format).
# path <- "StudyDocuments/CognitiveImpairment"
# list.files(path)
# f <- sprintf("%s/%s", path, "Requested Chemo Data.xlsx")
url <- "https://docs.google.com/spreadsheets/d/1kANi0laOaoFbBXxbanARcp7zowQ5eOfOcOr_sQLhJHo/edit?usp=sharing"
gs_auth()
gs_url(url)
## Sheet-identifying info appears to be a browser URL.
## googlesheets will attempt to extract sheet key from the URL.
## Putative key: 1kANi0laOaoFbBXxbanARcp7zowQ5eOfOcOr_sQLhJHo
## Authentication will be used.
## Sheet successfully identifed: "Requested Chemo Data.xlsx"
## Spreadsheet title: Requested Chemo Data.xlsx
## Spreadsheet author: benjamin.ks.chan
## Date of googlesheets registration: 2015-10-30 16:51:42 GMT
## Date of last spreadsheet update: 2015-10-03 14:30:34 GMT
## visibility: private
## permissions: rw
## version: new
##
## Contains 1 worksheets:
## (Title): (Nominal worksheet extent as rows x columns)
## Sheet1: 1000 x 79
##
## Key: 1kANi0laOaoFbBXxbanARcp7zowQ5eOfOcOr_sQLhJHo
## Browser URL: https://docs.google.com/spreadsheets/d/1kANi0laOaoFbBXxbanARcp7zowQ5eOfOcOr_sQLhJHo/
# D0 <- read.xlsx(f, sheet=1)
D0 <- gs_read(gs_url(url))
## Sheet-identifying info appears to be a browser URL.
## googlesheets will attempt to extract sheet key from the URL.
## Putative key: 1kANi0laOaoFbBXxbanARcp7zowQ5eOfOcOr_sQLhJHo
## Authentication will be used.
## Sheet successfully identifed: "Requested Chemo Data.xlsx"
## Accessing worksheet titled "Sheet1"
D0 <- data.table(D0)
Show a map of the column names and locations.
colNames <- data.frame(colNum = 1:ncol(D0),
colCell = c(LETTERS,
sprintf("%s%s", LETTERS[1], LETTERS),
sprintf("%s%s", LETTERS[2], LETTERS),
sprintf("%s%s", LETTERS[3], LETTERS))[1:ncol(D0)],
varName = names(D0))
colNames
## colNum colCell varName
## 1 1 A First.Auth
## 2 2 B Study.Ref
## 3 3 C Pub.Year
## 4 4 D Journal
## 5 5 E Pre.Meta
## 6 6 F Design
## 7 7 G Comp.Grp
## 8 8 H Healthy_GROUP
## 9 9 I Tx.Grp
## 10 10 J Pre.Post.Time.Interval
## 11 11 K Time.SD
## 12 12 L Tx.N
## 13 13 M Ctl.N
## 14 14 N Total.N
## 15 15 O Tx.Age
## 16 16 P Tx.Age.SD
## 17 17 Q Ctl.Age
## 18 18 R Ctl.Age.SD
## 19 19 S Tx.IQ
## 20 20 T Tx.IQ.SD
## 21 21 U Ctl.IQ
## 22 22 V Ctl.IQ.SD
## 23 23 W IQ.Note
## 24 24 X Tx.EDU
## 25 25 Y Tx.EDU.SD
## 26 26 Z Ctl.EDU
## 27 27 AA Ctl.EDU.SD
## 28 28 AB EDU.Note
## 29 29 AC Tx.Chem.Time
## 30 30 AD Tx.Chem.Time.SD
## 31 31 AE Cognitive.Domain.Primary
## 32 32 AF Cog.Test
## 33 33 AG Score.Typ
## 34 34 AH Tx.M
## 35 35 AI Tx.SD
## 36 36 AJ Ctl.M
## 37 37 AK Ctl.SD
## 38 38 AL Direct.Notes
## 39 39 AM X1.X2
## 40 40 AN Tx.N.1
## 41 41 AO Ctl.N.1
## 42 42 AP Tx.SD.2
## 43 43 AQ Ctl.SD.2
## 44 44 AR Spooled
## 45 45 AS Cohen.s.d
## 46 46 AT Hedges.g
## 47 47 AU Var1
## 48 48 AV Var2
## 49 49 AW Variance
## 50 50 AX Standard.Error
## 51 51 AY Weight
## 52 52 AZ w.ES
## 53 53 BA w.ES.2
## 54 54 BB w.2
## 55 55 BC StudyES
## 56 56 BD StudySE
## 57 57 BE z
## 58 58 BF LowerCI
## 59 59 BG UpperCI
## 60 60 BH Q
## 61 61 BI df
## 62 62 BJ Q.Critical
## 63 63 BK Q.Sig...p..05.
## 64 64 BL RANDOM.EFFECT
## 65 65 BM RE_w
## 66 66 BN w.ES.1
## 67 67 BO w.ES.2.1
## 68 68 BP w.2.1
## 69 69 BQ StudyES.1
## 70 70 BR StudySE.1
## 71 71 BS z.1
## 72 72 BT LowerCI.1
## 73 73 BU UpperCI.1
## 74 74 BV Q.1
## 75 75 BW df.1
## 76 76 BX Q.Critical.1
## 77 77 BY Q.Sig...p..05..1
## 78 78 BZ I.2.Fixed
## 79 79 CA I.2.Random
Put the summary rows in a separate data table, DOno.
DOno <- D0[is.na(First.Auth), c(51:ncol(D0)), with=FALSE]
Put the instrument-level rows in a separate data table, D. Only keep the columns needed to calculate fixed and random effects statistics.
Need more information on the RANDOM.EFFECT column. This column has a mean of 0.161462 and a standard deviation of 0. It’s a mystery where this comes from.
importantVar <- c(1, 7:10, 12:15, 17, 34:38, 64, 31:33)
D <- D0[!is.na(First.Auth), importantVar, with=FALSE]
setnames(D,
names(D),
c("author",
"comparisonGroup",
"healthyGroup",
"treatmentGroup",
"timeDays",
"nGroup1",
"nGroup2",
"nTotal",
"ageGroup1",
"ageGroup2",
"meanGroup1",
"sdGroup1",
"meanGroup2",
"sdGroup2",
"direction",
"randomEffect",
gsub("\\.", "", names(D0)[31:33]))) # NEED TO FIND OUT WHERE RANDOM EFFECT COMES FROM
D <- D[direction == "Lower worse",
`:=` (diffMean = meanGroup2 - meanGroup1)]
D <- D[direction == "Greater worse",
`:=` (diffMean = meanGroup1 - meanGroup2)]
D <- D[,
`:=` (sdPooled = sqrt((((nGroup1 - 1) * (sdGroup1 ^ 2)) +
((nGroup2 - 1) * (sdGroup2 ^ 2))) /
(nGroup1 + nGroup2 - 2)))]
D <- D[,
`:=` (cohenD = diffMean / sdPooled)]
D <- D[,
`:=` (hedgesG = cohenD * (1 - (3 / ((4 * nTotal) - 9))))]
D <- D[,
`:=` (var1 = (nGroup1 + nGroup2) / (nGroup1 * nGroup2),
var2 = hedgesG ^ 2 / (2 * (nGroup1 + nGroup2)))]
D <- D[,
`:=` (variance = var1 + var2)]
D <- D[,
`:=` (se = sqrt(variance),
weightFE = 1 / variance)]
D <- D[,
`:=` (effSizeWeightedFE = weightFE * hedgesG)]
D <- D[, weightRE := 1 / (variance + randomEffect)]
D <- D[, effSizeWeightedRE := weightRE * hedgesG]
Domains and tests.
D[, .N, .(CognitiveDomainPrimary, CogTest)][order(CognitiveDomainPrimary, CogTest)]
## CognitiveDomainPrimary CogTest N
## 1: Attention Arithmetic: WAIS-III 2
## 2: Attention Digit Symbol Coding: WAIS-III 2
## 3: Attention Digit span: WAIS-III 2
## 4: Attention PASAT number correct 2
## 5: Attention TMT part A time 2
## 6: Attention Trails A 2
## 7: Attention WAIS-R arithmetic 2
## 8: Attention WAIS-R digit span 2
## 9: Attention WAIS-R digit symbol 2
## 10: Attention WMS-III digit span backwards 2
## 11: Attention WMS-III digit span forward 2
## 12: Attention WMS-III spatial span backwards 2
## 13: Attention WMS-III spatial span forwards 2
## 14: Executive Function Consonant trigrams 2
## 15: Executive Function Stroop 2
## 16: Executive Function TMT part B time 2
## 17: Executive Function Trails B 2
## 18: Executive Function Verbal Fluency FAS number correct 2
## 19: Executive Function Verbal fluency COWAT correct 2
## 20: Executive Function WCST sorts divided by trials 2
## 21: LTM AVLT delayed 2
## 22: LTM CVLT delayed recall 2
## 23: LTM CVLT delayed recognition 2
## 24: LTM Complex figure delayed 2
## 25: LTM Family pictures II: WMS-III 2
## 26: LTM Logical memory II: WMS-III 2
## 27: LTM RAVL delayed recall 4
## 28: LTM RAVL total score 4
## 29: LTM RAVL trial 6 4
## 30: LTM RCF delayed recall 4
## 31: LTM RVLT delayed recall 2
## 32: LTM RVLT delayed recognition 2
## 33: LTM Spatial span: WMS-III 2
## 34: LTM WMS-III Story delayed recall 2
## 35: Language Boston Naming Test number correct 2
## 36: Language WAIS-R similarities 2
## 37: Motor Grooved Peg Board time 2
## 38: Motor Grooved pegboard dominant hand 2
## 39: Motor Grooved pegboard nondominant hand 2
## 40: Processing Letter cancellation 2
## 41: Processing Symbol search: WAIS-III 2
## 42: STM 4WSTM 15 sec 4
## 43: STM 4WSTM 30 sec 4
## 44: STM 4WSTM 5 sec 4
## 45: STM AVLT supraspan 2
## 46: STM AVLT total 2
## 47: STM CVLT Trial 1 2
## 48: STM Complex figure immediate 2
## 49: STM Letter-number sequencing: WAIS-III 2
## 50: STM RCF immediate recall 4
## 51: STM RVLT trial 1 2
## 52: STM WMS-III Story immediate recall 2
## 53: STM WMS-III letter number sequencing 2
## 54: Visuospatial Block design: WAIS-III 2
## 55: Visuospatial WAIS-R block design 2
## CognitiveDomainPrimary CogTest N
Calculate fixed effects statisitcs.
DFixed <- D[,
.(df = .N,
sumWeights = sum(weightFE),
effSize = sum(effSizeWeightedFE) / sum(weightFE),
se = sqrt(1 / sum(weightFE)),
sumEffSizeWeighted = sum(effSizeWeightedFE),
ssEffSizeWeighted = sum(weightFE * hedgesG ^ 2),
ssWeights = sum(weightFE ^ 2)),
.(author, timeDays)]
DFixed <- DFixed[,
`:=` (z = effSize / se,
lowerCI = effSize + qnorm(0.025) * se,
upperCI = effSize + qnorm(0.975) * se,
Q = ssEffSizeWeighted - (sumEffSizeWeighted ^ 2 / sumWeights),
criticalValue = qchisq(0.05, df, lower.tail=FALSE))]
DFixed <- DFixed[,
`:=` (pvalue = pchisq(Q, df, lower.tail=FALSE),
Isq = 100 * ((Q - df) / Q))]
Check if my calculations agree with Ono’s.
isCheckFixedPassed <- all.equal(DOno[, .(StudyES, z, Q)],
DFixed[, .(effSize, z, Q)],
check.names=FALSE)
message(sprintf("Do my FIXED effect statistic calculations agree with Ono's? %s",
isCheckFixedPassed))
## Do my FIXED effect statistic calculations agree with Ono's? TRUE
print(xtable(DFixed), type="html")
| author | timeDays | df | sumWeights | effSize | se | sumEffSizeWeighted | ssEffSizeWeighted | ssWeights | z | lowerCI | upperCI | Q | criticalValue | pvalue | Isq | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Bender | 182.62 | 16 | 96.80 | 1.02 | 0.10 | 98.53 | 241.49 | 626.88 | 10.01 | 0.82 | 1.22 | 141.21 | 26.30 | 0.00 | 88.67 |
| 2 | Bender | 547.50 | 16 | 63.53 | 0.55 | 0.13 | 34.76 | 285.90 | 290.59 | 4.36 | 0.30 | 0.79 | 266.88 | 26.30 | 0.00 | 94.00 |
| 3 | Collins | 537.90 | 23 | 604.56 | 0.21 | 0.04 | 124.90 | 39.49 | 15893.07 | 5.08 | 0.13 | 0.29 | 13.69 | 35.17 | 0.94 | -68.01 |
| 4 | Collins | 146.50 | 23 | 607.30 | 0.10 | 0.04 | 58.14 | 17.63 | 16035.80 | 2.36 | 0.02 | 0.18 | 12.07 | 35.17 | 0.97 | -90.58 |
| 5 | Jenkins | 364.00 | 14 | 592.05 | 0.08 | 0.04 | 47.58 | 23.62 | 25038.13 | 1.96 | -0.00 | 0.16 | 19.79 | 23.68 | 0.14 | 29.27 |
| 6 | Jenkins | 28.00 | 14 | 593.46 | 0.03 | 0.04 | 19.46 | 12.29 | 25157.32 | 0.80 | -0.05 | 0.11 | 11.65 | 23.68 | 0.63 | -20.17 |
| 7 | Wefel | 182.62 | 10 | 89.09 | 0.18 | 0.11 | 15.73 | 5.24 | 793.76 | 1.67 | -0.03 | 0.38 | 2.47 | 18.31 | 0.99 | -305.57 |
| 8 | Wefel | 547.86 | 10 | 79.52 | 0.26 | 0.11 | 20.75 | 8.62 | 632.66 | 2.33 | 0.04 | 0.48 | 3.20 | 18.31 | 0.98 | -212.29 |
Calculate random effects statisitcs.
DRandom <- D[,
.(df = .N,
sumWeights = sum(weightRE),
ssEffSizeWeighted = sum(weightRE * hedgesG ^ 2),
ssWeights = sum(weightRE ^ 2),
sumEffSizeWeighted = sum(effSizeWeightedRE),
effSize = sum(effSizeWeightedRE) / sum(weightRE),
se = sqrt(1 / sum(weightRE))),
.(author, timeDays)]
DRandom <- DRandom[,
`:=` (z = effSize / se,
lowerCI = effSize + qnorm(0.025) * se,
upperCI = effSize + qnorm(0.975) * se,
Q = ssEffSizeWeighted - (sumEffSizeWeighted ^ 2 / sumWeights),
criticalValue = qchisq(0.05, df, lower.tail=FALSE))]
DRandom <- DRandom[,
`:=` (pvalue = pchisq(Q, df, lower.tail=FALSE),
Isq = 100 * ((Q - df) / Q))]
Check if my calculations agree with Ono’s.
isCheckRandomPassed <- all.equal(DOno[, c(19, 21, 24), with=FALSE],
DRandom[, .(effSize, z, Q)],
check.names=FALSE)
message(sprintf("Do my RANDOM effect statistic calculations agree with Ono's? %s",
isCheckRandomPassed))
## Do my RANDOM effect statistic calculations agree with Ono's? TRUE
print(xtable(DRandom), type="html")
| author | timeDays | df | sumWeights | ssEffSizeWeighted | ssWeights | sumEffSizeWeighted | effSize | se | z | lowerCI | upperCI | Q | criticalValue | pvalue | Isq | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Bender | 182.62 | 16 | 48.04 | 137.29 | 147.43 | 53.60 | 1.12 | 0.14 | 7.73 | 0.83 | 1.40 | 77.50 | 26.30 | 0.00 | 79.35 |
| 2 | Bender | 547.50 | 16 | 37.25 | 199.95 | 92.56 | 26.23 | 0.70 | 0.16 | 4.30 | 0.38 | 1.03 | 181.48 | 26.30 | 0.00 | 91.18 |
| 3 | Collins | 537.90 | 23 | 115.28 | 7.62 | 577.83 | 23.96 | 0.21 | 0.09 | 2.23 | 0.03 | 0.39 | 2.64 | 35.17 | 1.00 | -770.38 |
| 4 | Collins | 146.50 | 23 | 115.38 | 3.38 | 578.84 | 11.11 | 0.10 | 0.09 | 1.03 | -0.09 | 0.28 | 2.31 | 35.17 | 1.00 | -895.09 |
| 5 | Jenkins | 364.00 | 14 | 75.63 | 3.04 | 408.57 | 6.11 | 0.08 | 0.11 | 0.70 | -0.14 | 0.31 | 2.54 | 23.68 | 1.00 | -450.68 |
| 6 | Jenkins | 28.00 | 14 | 75.65 | 1.57 | 408.83 | 2.50 | 0.03 | 0.11 | 0.29 | -0.19 | 0.26 | 1.49 | 23.68 | 1.00 | -840.71 |
| 7 | Wefel | 182.62 | 10 | 36.53 | 2.16 | 133.47 | 6.48 | 0.18 | 0.17 | 1.07 | -0.15 | 0.50 | 1.01 | 18.31 | 1.00 | -890.02 |
| 8 | Wefel | 547.86 | 10 | 34.81 | 3.79 | 121.21 | 9.12 | 0.26 | 0.17 | 1.55 | -0.07 | 0.59 | 1.41 | 18.31 | 1.00 | -611.34 |
Save working data tables to file if the integrity checks passed. I don’t need to save DOno since the integrity checks passed.
metadataD = makeMetadata(D)
metadataDFixed = makeMetadata(DFixed)
metadataDRandom = makeMetadata(DRandom)
if (isCheckFixedPassed & isCheckRandomPassed) {
f <- "Ono.RData"
save(D,
metadataD,
DFixed,
metadataDFixed,
DRandom,
metadataDRandom,
file=f)
message(sprintf("%s saved on: %s\nFile size: %s bytes",
f,
file.mtime(f),
file.size(f)))
} else {
warning(sprinf("Integrity checks failed.\n%s not saved.", f))
}
## Ono.RData saved on: 2015-10-30 09:51:44
## File size: 67458 bytes
Read data from Ahles TA, et al. “Longitudinal Assessment of Cognitive Changes Associated With Adjuvant Treatment for Breast Cancer: Impact of Age and Cognitive Reserve.” J Clin Oncol. 2010 Oct 10; 28(29): 4434-4440.
Data file was requested and received from the co-author, Yuelin Li, in October 2015.
Read data file (text format).
path <- "StudyDocuments/CognitiveImpairment"
# list.files(path)
f <- sprintf("%s/%s", path, "Soulsby_means.txt")
D <- fread(f, sep="|")
Study design.
D[, .(nrows = .N, totalN = sum(N)), .(txgrp, ptime)]
## txgrp ptime nrows totalN
## 1: chemo baseline 35 2056
## 2: chemo posttx 35 1886
## 3: chemo 1yr 35 1677
## 4: chemo 2yr 35 1549
## 5: chemo no baseline 35 2432
## 6: chemo no posttx 35 2321
## 7: chemo no 1yr 35 2237
## 8: chemo no 2yr 35 2138
## 9: control baseline 35 1522
## 10: control posttx 35 1478
## 11: control 1yr 35 1447
## 12: control 2yr 35 1346
Instruments.
D[, .N, .(Variable, Label)]
## Variable Label N
## 1: AN_NAMES_z_adj DKEFS Verbal Fluency: anival or clothing and names 12
## 2: BD_RAW_z_adj WASI: Block Design 12
## 3: CFL_z_adj DKEFS Verbal Fluency 12
## 4: CVLT_z_adj CVLT-2: Trials 1-5 Total 12
## 5: DCCSORT_z_adj DKEFS Card Sorting: Confirmed Correct Sorts 12
## 6: DCOLT_z_adj DKEFS Stroop: Color Patch Naming 12
## 7: DCSC_z_adj DKEFS Verbal Fluency: Switching Fruits/Veget 12
## 8: DCWT_z_adj DKEFS Stroop: Color-Word 12
## 9: DFSDES_z_adj DKEFS Card Sorting: Free Sorting 12
## 10: DISCR_z_adj CPT: Distractibility, Correct Responses 12
## 11: DISFP_z_adj CPT: Distractibility, False Positives 12
## 12: DISRT_z_adj CPT: Distractibility, Reaction Time 12
## 13: DRECDES_z_adj DKEFS: Card Sorting, Sort Recognition 12
## 14: DST_z_adj DKEFS: Stroop, Set Shifting 12
## 15: DSY_RAW_z_adj CVLT-2: Digit Symbol 12
## 16: DTR1SC_z_adj DKEFS Trails: Visual Scanning in Seconds 12
## 17: DTR2SC_z_adj DKEFS Trails: Number Sequencing, sec 12
## 18: DTR3SC_z_adj DKEFS Trails: Letter Sequencing, sec 12
## 19: DTR4SC_z_adj DKEFS Trails: Number-Letter Switching, sec 12
## 20: DTR5SC_z_adj DKEFS Trails: Motor Speed, sec 12
## 21: DWRDT_z_adj DKEFS Stroop: Word Reading, sec 12
## 22: FACE1_z_adj Wechsler Memory Scale-3: Faces I 12
## 23: FACE2_z_adj Wechsler Memory Scale-3: Faces II 12
## 24: GROOVEL_z_adj Grooved Pegboard Test: Left Hand, sec 12
## 25: GROOVER_z_adj Grooved Pegboard Test: Right Hand, sec 12
## 26: LD_z_adj CVLT-2: Long Delay Free Recall 12
## 27: LM1_z_adj Wechsler Memory Scale-3: Logical Memory I 12
## 28: LM2_z_adj Wechsler Memory Scale-3: Logical Memory II 12
## 29: RAO2_z_adj PASAT (Rao): 2 second pacing 12
## 30: RAO3_z_adj PASAT (Rao): 3 second pacing 12
## 31: READ_RAW_z_adj WRAT-3 Reading Score 12
## 32: VIGCR_z_adj CPT: Vigilance, Correct Responses 12
## 33: VIGFP_z_adj CPT: Vigilance, False Positives 12
## 34: VIGRT_z_adj CPT: Vigilance, Reaction Time 12
## 35: VOC_RAW_z_adj WASI: Vocabulary 12
## Variable Label N
Save working data tables to file if the integrity checks passed. I don’t need to save DOno since the integrity checks passed.
metadata = makeMetadata(D)
f <- "Ahles.RData"
save(D, metadata, file=f)
message(sprintf("%s saved on: %s\nFile size: %s bytes",
f,
file.mtime(f),
file.size(f)))
## Ahles.RData saved on: 2015-10-30 09:51:44
## File size: 24207 bytes
## Sourcing https://gist.githubusercontent.com/benjamin-chan/80149dd4cdb16b2760ec/raw/a1fafde5c5086024dd01d410cc2f72fb82e93f26/sessionInfo.R
## SHA-1 hash of file is 41209357693515acefb05d4b209340e744a1cbe4
## $timeStart
## [1] "2015-10-30 09:51:41"
##
## $timeEnd
## [1] "2015-10-30 09:51:44 PDT"
##
## $timeElapsed
## [1] "3.597 secs"
##
## $Sys.info
## sysname release
## "Windows" "7 x64"
## version nodename
## "build 7601, Service Pack 1" "GHBA299"
## machine login
## "x86-64" "chanb"
## user effective_user
## "chanb" "chanb"
##
## $sessionInfo
## R version 3.2.2 (2015-08-14)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 7 x64 (build 7601) Service Pack 1
##
## locale:
## [1] LC_COLLATE=English_United States.1252
## [2] LC_CTYPE=English_United States.1252
## [3] LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C
## [5] LC_TIME=English_United States.1252
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] xtable_1.7-4 googlesheets_0.1.0 RColorBrewer_1.1-2
## [4] extrafont_0.17 DiagrammeR_0.7 V8_0.9
## [7] devtools_1.8.0 data.table_1.9.6
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.1 rstudioapi_0.3.1 Rttf2pt1_1.3.3 knitr_1.11
## [5] xml2_0.1.2 magrittr_1.5 R6_2.1.1 dplyr_0.4.3
## [9] httr_1.0.0 stringr_1.0.0 tools_3.2.2 parallel_3.2.2
## [13] DBI_0.3.1 extrafontdb_1.0 git2r_0.11.0 htmltools_0.2.6
## [17] rversions_1.0.2 lazyeval_0.1.10 assertthat_0.1 yaml_2.1.13
## [21] digest_0.6.8 formatR_1.2 htmlwidgets_0.5 curl_0.9.3
## [25] memoise_0.2.1 evaluate_0.7.2 rmarkdown_0.7 stringi_0.5-5
## [29] cellranger_1.0.0 jsonlite_0.9.16 chron_2.3-47